package org.example.managere.dto.feibiao;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import jakarta.validation.constraints.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import org.example.managere.entity.feibiao.AmAapOutput.MotorState;

/**
 * 工况特定输出参数表 DTO
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class AmAapOutputDto implements Serializable {
    private Integer id;

    @NotEmpty(message = "电机ID不能为空")
    @Size(max = 10, message = "电机ID长度不能超过10个字符")
    private String motorId;

    @NotNull(message = "电机状态不能为空")
    private MotorState motorState;

    @NotNull(message = "判定置信度不能为空")
    @DecimalMin(value = "0.0000", inclusive = true, message = "判定置信度不能小于0")
    @DecimalMax(value = "1.0000", inclusive = true, message = "判定置信度不能大于1")
    private BigDecimal confidenceScore;

    @NotEmpty(message = "状态概率分布不能为空")
    private String stateProbabilities;

    @NotNull(message = "剩余使用寿命不能为空")
    @Min(value = 0, message = "剩余使用寿命不能小于0")
    private Float remainingUsefulLife;

    @NotEmpty(message = "维护建议方案不能为空")
    private String maintenanceRecommendation;

    @NotNull(message = "建议下次检查时间不能为空")
    @Future(message = "建议下次检查时间必须是将来的时间")
    private LocalDateTime nextInspectionTime;

    @NotEmpty(message = "部件健康度不能为空")
    private String componentHealth;

    @NotEmpty(message = "故障概率不能为空")
    private String faultProbabilities;

    @NotNull(message = "异常指数不能为空")
    @DecimalMin(value = "0.0000", inclusive = true, message = "异常指数不能小于0")
    @DecimalMax(value = "1.0000", inclusive = true, message = "异常指数不能大于1")
    private BigDecimal anomalyScore;

    private LocalDateTime updateTime;
} 